package com.mx102.bandyta;

import java.util.LinkedList;
import java.util.Timer;
import java.util.TimerTask;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class Beben {

	private Walec walec1, walec2, walec3;
	private Sound stop1Snd, stop2Snd, stop3Snd,playSnd;
	private boolean losuje;
	private Animacja kreciolekL;
	private Animacja kreciolekP;
	private Music spinSnd;
	

	public Beben(AssetManager manager) {

		// Inicjalizacja dzwiekow
		spinSnd = manager.get("spin.wav",Music.class);
		playSnd = manager.get("play.wav",Sound.class);
		stop1Snd = manager.get("stop1.wav",Sound.class);
		stop2Snd = manager.get("stop2.wav",Sound.class);
		stop3Snd = manager.get("stop3.wav",Sound.class);

		// Inicjalizacja 3 walcow i ustawienie poczatkowego wyniki
		walec1 = new Walec(manager,100, 90);
		walec2 = new Walec(manager,247, 90);
		walec3 = new Walec(manager,394, 90);
		losuje = false;
		ustawWynik();

		// Inicjalizacja "kreciolkow"
		kreciolekL = new Animacja(manager,"kreciolekl.png", 37, 81, 37, 128, 17, 0.05f);
		kreciolekP = new Animacja(manager,"kreciolekp.png", 564, 81, 40, 128, 17, 0.05f);

	}

	public void render(SpriteBatch sb, float delta) {

		// Rysowanie bebnow i kreciokow
		
		walec1.render(sb, delta);
		walec2.render(sb, delta);
		walec3.render(sb, delta);

		if (losuje) {
			kreciolekL.render(sb, delta);
			kreciolekP.render(sb, delta);
		}

	}

	public void start() {
		// Rozpoczenie obrotow bebnow
		
		walec1.start();
		walec2.start();
		walec3.start();

		losuje = true;
		playSnd.play();
		spinSnd.play();
		spinSnd.setLooping(true);
		spinSnd.setVolume(1);
	}

	private void ustawWynik() {

		// Generowanie wyniku
		
		int wynik[][] = new int[3][3];

		LinkedList<Integer> wartosci = new LinkedList<Integer>();
		wartosci.clear();
		// Wygenerowanie zbioru rozwiazan, max 2 wartosci powtarzajace sie
		for (int i = 0; i < 9; i++) {
			wartosci.add(i);
			wartosci.add(i);
			
		}

		// Wybranie wyniku ze zbioru rozwiazan
		for (int i = 0; i < 3; i++)
			for (int j = 0; j < 3; j++) {
				int index = (int) Math.round(Math.random() * (wartosci.size()-1));
				wynik[i][j] = wartosci.get(index);
				wartosci.remove(index);
			}

		// Przeslanie wyniku do bebnow
		walec1.wynik(wynik[0]);
		walec2.wynik(wynik[1]);
		walec3.wynik(wynik[2]);

	}

	public void stop() {

		// Zatrzymanie losowania
		
		// Ustawienie wyniku
		ustawWynik();

		// 3 timery kolejno zatrzymujace walce
		Timer walec1Stop = new Timer();
		Timer walec2Stop = new Timer();
		Timer walec3Stop = new Timer();

		walec1Stop.schedule(new TimerTask() {
			@Override
			public void run() {
				walec1.stop();
				stop1Snd.play();
				spinSnd.setVolume(0.5f);
			}
		}, 300);

		walec2Stop.schedule(new TimerTask() {
			@Override
			public void run() {
				walec2.stop();
				stop2Snd.play();
				spinSnd.setVolume(0.2f);
			}
		}, 600);

		walec3Stop.schedule(new TimerTask() {
			@Override
			public void run() {
				walec3.stop();
				stop3Snd.play();
				// Ostatni bebn- koniec losowania
				losuje = false;
				spinSnd.stop();

			}
		}, 900);

	}

	public boolean losuje() {
		return losuje;
	}
}
